all repos — caroster @ 745f88dd9d66f63801484d5a89b6d471782c9b0b

[Octree] Group carpool to your event https://caroster.io

frontend/pages/e/[uuid]/alerts.tsx (view raw)

 1import {PropsWithChildren} from 'react';
 2import Alerts from '../../../containers/Alerts';
 3import EventLayout, {TabComponent} from '../../../layouts/Event';
 4import {
 5  EventByUuidDocument,
 6  EventEntity,
 7  TripAlertDocument,
 8  TripAlertEntity,
 9} from '../../../generated/graphql';
10import pageUtils from '../../../lib/pageUtils';
11import {getLocaleForLang} from '../../../lib/getLocale';
12
13interface Props {
14  eventUUID: string;
15  announcement?: string;
16  event: EventEntity;
17  tripAlertEntity: TripAlertEntity;
18}
19
20const Page = (props: PropsWithChildren<Props>) => {
21  return (
22    <EventLayout
23      {...props}
24      Tab={AlertsTab}
25      tabProps={{tripAlertEntity: props.tripAlertEntity}}
26    />
27  );
28};
29
30const AlertsTab: TabComponent<Props> = ({
31  event,
32  tripAlertEntity,
33}: {
34  event: EventEntity;
35  tripAlertEntity: TripAlertEntity;
36}) => {
37  return <Alerts event={event} tripAlertEntity={tripAlertEntity} />;
38};
39
40export const getServerSideProps = pageUtils.getServerSideProps(
41  async (context, apolloClient) => {
42    const {uuid} = context.query;
43    const {host = ''} = context.req.headers;
44    let event = null;
45    let tripAlertEntity = null;
46
47    try {
48      const {data} = await apolloClient.query({
49        query: EventByUuidDocument,
50        variables: {uuid},
51      });
52      event = data?.eventByUUID?.data;
53    } catch (error) {
54      return {
55        notFound: true,
56      };
57    }
58
59    const isCarosterPlus =
60      event?.attributes?.enabled_modules?.includes('caroster-plus');
61    if (!isCarosterPlus)
62      return {
63        notFound: true,
64      };
65
66    try {
67      const {data} = await apolloClient.query({
68        query: TripAlertDocument,
69        variables: {eventId: event.id},
70      });
71      tripAlertEntity = data.eventTripAlert.data;
72    } catch (error) {
73      tripAlertEntity = null;
74    }
75
76    const description = await getLocaleForLang(
77      event?.attributes?.lang,
78      'meta.description'
79    );
80
81    return {
82      props: {
83        eventUUID: uuid,
84        tripAlertEntity,
85        metas: {
86          title: event?.attributes?.name || '',
87          description,
88          url: `https://${host}${context.resolvedUrl}`,
89        },
90      },
91    };
92  }
93);
94
95export default Page;